Delphi zu Lazarus

Für Fragen von Einsteigern und Programmieranfängern...
Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Delphi zu Lazarus

Beitrag von Bauer321 »

ich habe jetzt beim googlen das hier gefunden:

http://www.delphi-treff.de/tipps/grafik ... -desktops/

was muss ich denn jetzt machen(speziell für den fall aber auch allgemein) damit das geht
www.mcpatcher.net | www.hoeper.me

Benutzeravatar
theo
Beiträge: 10928
Registriert: Mo 11. Sep 2006, 19:01

Re: Delphi zu Lazarus

Beitrag von theo »

http://wiki.lazarus.freepascal.org/Deve ... _erstellen" onclick="window.open(this.href);return false;

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: Delphi zu Lazarus

Beitrag von Bauer321 »

danke

aber:
Bild

das kann ich mir nicht so ganz erklären...
www.mcpatcher.net | www.hoeper.me

Benutzeravatar
theo
Beiträge: 10928
Registriert: Mo 11. Sep 2006, 19:01

Re: Delphi zu Lazarus

Beitrag von theo »

Nimm die unit "windows" aus der uses, und dafür die hier rein: uses LCLIntf, LCLType; wie's da steht.

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: Delphi zu Lazarus

Beitrag von Bauer321 »

also das ist bei uses:

uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
ExtCtrls, Menus, StdCtrls, Windows, Messages, LCLIntf, LCLType, ublack, unit_test;

ich glaube aber ich brauche windows noch woanders für oder nicht?
www.mcpatcher.net | www.hoeper.me

Benutzeravatar
theo
Beiträge: 10928
Registriert: Mo 11. Sep 2006, 19:01

Re: Delphi zu Lazarus

Beitrag von theo »

Bauer321 hat geschrieben: ich glaube aber ich brauche windows noch woanders für oder nicht?
Das siehst du ja, wenn du's wegmachst. Wenn's ohne kompiliert nicht.
Sonst nimm es an den Anfang der Liste, jedenfalls vor Graphics.

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Delphi zu Lazarus

Beitrag von Socke »

Bauer321 hat geschrieben:ich glaube aber ich brauche windows noch woanders für oder nicht?
Die Unit Windows brauchst du nur, wenn du Windows-spezifische API-Funktionen direkt verwenden willst. Die oben genannten Units der LCL stellen einen Großteil dessen bereit, was Delphi ebenfalls in der Unit Windows implementierte.
Ansonsten wird ein anderer Teil der Win-API auch über TWidgetset für jedes einzelne Widgetset implementiert (Zugriff über InterfaceBase.WidgetSet).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: Delphi zu Lazarus

Beitrag von Bauer321 »

theo hat geschrieben:
Bauer321 hat geschrieben: ich glaube aber ich brauche windows noch woanders für oder nicht?
Das siehst du ja, wenn du's wegmachst. Wenn's ohne kompiliert nicht.
Sonst nimm es an den Anfang der Liste, jedenfalls vor Graphics.
doch brauche ich... aber damit bin ich jetzt noch kein stück weiter...
www.mcpatcher.net | www.hoeper.me

Benutzeravatar
theo
Beiträge: 10928
Registriert: Mo 11. Sep 2006, 19:01

Re: Delphi zu Lazarus

Beitrag von theo »

Bauer321 hat geschrieben:aber damit bin ich jetzt noch kein stück weiter...
Das glaube ich dir nicht.

shokwave
Beiträge: 475
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: Delphi zu Lazarus

Beitrag von shokwave »

Ich kann nur sagen, Theos Link läuft bei mir, mit kleinen Änderungen, unter Ubuntu 64bit und WinXP 32bit.

Code: Alles auswählen

unit Unit1; 
 
{$mode objfpc}{$H+}
 
interface
 
uses
  LCLIntf, LCLType, Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 
 
var
  Form1: TForm1; 
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
var
  MyBitmap: TBitmap;
  ScreenDC: HDC;
begin
  MyBitmap := TBitmap.Create;
  ScreenDC := GetDC(0);
  MyBitmap.LoadFromDevice(ScreenDC);
  ReleaseDC(0, ScreenDC);
  MyBitmap.SaveToFile('test.bmp');
end;
 
end.
mfg Ingo

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: Delphi zu Lazarus

Beitrag von Bauer321 »

das ist der komplette quellcode aber es geht leider nicht...

Code: Alles auswählen

unit uhotkey;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  ExtCtrls, Menus, Windows, Messages, StdCtrls, LCLIntf, LCLType,
  ublack, unit_test;
 
type
  TWndProc = Windows.WNDPROC;
 
{ TForm1 }
 
TForm1 = class(TForm)
  Button1: TButton;
  Button2: TButton;
  buttonsreenshot: TButton;
  Image1: TImage;
  Memo1: TMemo;
  MenuItem1: TMenuItem;
  MenuItem2: TMenuItem;
  MenuItem3: TMenuItem;
  MenuItem4: TMenuItem;
  MenuItem5: TMenuItem;
  Notebook1: TNotebook;
  sreenshot: TPage;
  phelp: TPage;
  TrayMenu: TPopupMenu;
  TrayIcon1: TTrayIcon;
  procedure Button1Click(Sender: TObject);
  procedure Button2Click(Sender: TObject);
  procedure buttonsreenshotClick(Sender: TObject);
  procedure FormCreate(Sender: TObject);
  procedure FormDestroy(Sender: TObject);
  procedure FormWindowStateChange(Sender: TObject);
  procedure HotKeyPressed(Key :  Long_Ptr); // auf DIESE Deklaration kam es an
  procedure MenuItem1Click(Sender: TObject);
  procedure MenuItem2Click(Sender: TObject);
  procedure MenuItem3Click(Sender: TObject);
private
  { private declarations }
public
  { public declarations }
end;
 
var
  Form1: TForm1;
  PrevWndProc : Long_ptr;
 
implementation
 {$R *.lfm}
//die funktion braucht man: function BlockInput (fBlockInput : boolean) : DWord; stdcall; external 'user32.DLL'; //das muss woanders hin: BlockInput(true);
 
 
procedure TForm1.HotKeyPressed(Key :  Long_Ptr);
begin
  if ( int(Key) = 1 ) then begin
    // Deine Hotkeyverarbeitung ....
    close;
  end;
  if ( int(Key) = 2 ) then begin
    if Form2.visible = false
       then Form2.Visible := true
       else Form2.Visible := false;
    end;
  if ( int(Key) = 3 ) then begin
    if Form3.visible = false
       then Form3.visible := true
       else form3.visible := false;
  end;
  if ( int(Key) = 4 ) then begin
    if Form1.visible = false
       then Form1.visible := true
       else form1.visible := false;
  end;
 
  if ( int(Key) = 4 ) then
  begin
    buttonsreenshot.Click;
  end;
end;
 
procedure TForm1.MenuItem1Click(Sender: TObject);
begin
  close;
end;
 
procedure TForm1.MenuItem2Click(Sender: TObject);
begin
  Form1.Hide;
end;
 
procedure TForm1.MenuItem3Click(Sender: TObject);
begin
  Form1.Show;
end;
 
function MsgProc(Handle: HWnd; Msg: UInt; WParam: Windows.WParam; LParam: Windows.LParam): LResult; stdcall;
begin
  if Msg = WM_HOTKEY then Form1.HotKeyPressed(Wparam);
  Result := Windows.CallWindowProc(WNDPROC(PrevWndProc), Handle, Msg, WParam, LParam);
end;
 
{ TForm1 }
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  PrevWndProc:= Windows.GetWindowLongPtr(Self.Handle, GWL_WNDPROC);
  SetWindowLongPtr(Self.Handle,Windows.GWL_WNDPROC,Long_ptr(@MsgProc));
  RegisterHotKey(Handle, 1, MOD_CONTROL + MOD_ALT + MOD_SHIFT, VK_E);
  RegisterHotKey(Handle, 2, MOD_CONTROL + MOD_ALT + MOD_SHIFT, VK_B);
  RegisterHotKey(Handle, 3, MOD_CONTROL + MOD_ALT + MOD_SHIFT, VK_T);
  RegisterHotKey(Handle, 4, MOD_CONTROL + MOD_ALT + MOD_SHIFT, VK_S);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  close;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  Form1.Hide;
end;
 
procedure TForm1.buttonsreenshotClick(Sender: TObject);
var
  MyBitmap: TBitmap;
  ScreenDC: HDC;
begin
  MyBitmap := TBitmap.Create;
  ScreenDC := GetDC(0);
  MyBitmap.LoadFromDevice(ScreenDC);
  ReleaseDC(0, ScreenDC);
  MyBitmap.SaveToFile('test.bmp');
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
  UnregisterHotKey(Handle, 1);
  UnregisterHotKey(Handle, 2);
  UnregisterHotKey(Handle, 3);
  UnregisterHotKey(Handle, 4);
end;
 
procedure TForm1.FormWindowStateChange(Sender: TObject);
begin
  if Form1.Windowstate = wsminimized
  then begin
            Form1.Windowstate := wsnormal;
            Form1.Hide;
       end;
end;
 
initialization
{$I uhotkey.lrs}
 
end.
auch wenn ich dem einen key zuweise und es dann direkt und if key =1 ... mache dann kommen die selben fehler!
www.mcpatcher.net | www.hoeper.me

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Delphi zu Lazarus

Beitrag von Socke »

Bauer321 hat geschrieben:doch brauche ich... aber damit bin ich jetzt noch kein stück weiter...
Dann wäre es jetzt einmal an der Zeit, die Compiler-Meldungen zu lesen :D. Da steht unter anderem auch, was nicht gefunden wird, wenn du eine bestimmte Unit nicht mehr verwendest.

Edit:
Bauer321 hat geschrieben:dann kommen die selben fehler!
Welche Fehler? Ich sehe keine in deinem Post.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Bauer321
Beiträge: 465
Registriert: Sa 21. Aug 2010, 21:30
OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
CPU-Target: 64-Bit
Wohnort: nahe Bremen
Kontaktdaten:

Re: Delphi zu Lazarus

Beitrag von Bauer321 »

www.mcpatcher.net | www.hoeper.me

Benutzeravatar
theo
Beiträge: 10928
Registriert: Mo 11. Sep 2006, 19:01

Re: Delphi zu Lazarus

Beitrag von theo »

Ich habe dir gesagt, du sollst in der "uses" "Windows" VOR "Graphics" einsetzen. Hast du aber nicht gemacht.

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Delphi zu Lazarus

Beitrag von MAC »

der Grund dazu:
soweit ich weis scannt der compiler die daten von vone nach hinten durch (ist ja auch logisch)
da es schonmal vorkommt das 2 funktionen, daten, records, classes ,... den gleichen namen haben (aber in unterschiedlichen units sind) benutzt du warscheinlich das TBitmap was in windows steht, weil das das ursprüngliche TBitmap von Graphics "überschreibt". wenn du das änderst benutzt du das richtige Graphics TBitmap und die richtige windows funktion.
Evt sollte auch das gehen:

Code: Alles auswählen

var
  MyBitmap : Graphics.TBitmap;
  ScreenDC: HDC;
Korrigiert mich wenn ich falsch liegen...

Code: Alles auswählen

Signatur := nil;

Antworten