Ich bin gerade dabei eine kleine Software für einen Freund zu schreiben. Dabei möchte ich jedoch statt der Button-Komponente PaintBoxen mit eigenem Design verwenden.
Dabei trat dann jedoch folgendes Problem auf:
Die Knöpfe befinden sich auf einem Panel, werden zur Laufzeit mit
Code: Alles auswählen
BtnCancelTask:=TDesignButton2.Create(PanConsole, 'Abbrechen', 104, 80, 78, 25); //Parent, Caption, Left, Top, Width, Height
BtnRunTask:=TDesignButton2.Create(PanConsole, 'Start', 264, 80, 78, 25);
BtnAddTask:=TDesignButton2.Create(PanConsole, 'Hinzufügen', 349, 80, 78, 25);
Code: Alles auswählen
constructor TDesignButton.Create(Sender: TComponent; newBtnCaption: String;
newLeft, newTop, newWidth, newHeight: integer);
begin
inherited Create(Sender);
FBtnCaption:=newBtnCaption;
Width:=newWidth;
Height:=newHeight;
Left:=newLeft;
Top:=newTop;
Parent:=TWinControl(Sender);
self.OnPaint:=@Paint;
self.OnMouseEnter:=@MouseEnter;
self.OnMouseLeave:=@MouseLeave;
self.OnMouseDown:=@MouseDown;
self.OnMouseUp:=@MouseUp;
end;
Code: Alles auswählen
{Setzt Aussehen der Console}
procedure TForm1.setConsoleType(cType: String);
begin
if lowercase(cType)='run' then
begin
with Image2 do
begin
Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'data\icons\run_blue_big.png');
Visible:=true;
end;
with PanProgress do
begin
Visible:=true;
Left:=104;
Top:=16;
end;
PanConsole.Color:=$00FFEFD5;
ImgPrev.Visible:=false;
with Label4 do
begin
Left:=104;
Top:=56;
Font.Color:=$00B97400;
Caption:='Kopiervorgang läuft...';
Visible:=true;
end;
with BtnCancelTask do
begin
Visible:=true;
BtnCaption:='Abbrechen';
State:='cancel';
Width:=78;
Left:=104;
Top:=80;
end;
with BtnRunTask do
begin
Visible:=false;
BtnCaption:='';
State:='UNSET';
Width:=78;
Left:=264;
Top:=80;
end;
with BtnAddTask do
begin
Visible:=true;
BtnCaption:='Pausieren';
State:='pause';
Width:=78;
Left:=349;
Top:=80;
end;
end
else if lowercase(cType)='abort' then
begin
with Image2 do
begin
Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'data\icons\stop_red.png');
Visible:=true;
end;
with PanProgress do
begin
Visible:=true;
Left:=104;
Top:=16;
end;
PanConsole.Color:=$00CDCCFF;
ImgPrev.Visible:=false;
with Label4 do
begin
Left:=104;
Top:=56;
Font.Color:=$000000CC;
Caption:='Vorgang durch Benutzer abgebrochen.';
Visible:=true;
end;
with BtnCancelTask do
begin
Visible:=true;
BtnCaption:='Neu';
State:='new';
Width:=78;
Left:=104;
Top:=80;
end;
with BtnRunTask do
begin
Visible:=false;
BtnCaption:='Fortsetzen';
State:='UnSET';
Width:=78;
Left:=264;
Top:=80;
end;
with BtnAddTask do
begin
Visible:=true;
BtnCaption:='Fortsetzen';
State:='UNSET';
Width:=78;
Left:=349;
Top:=80;
end;
end
else if lowercase(cType)='pause' then
begin
with Image2 do
begin
Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'data\icons\pause_darkorange.png');
Visible:=true;
end;
with PanProgress do
begin
Visible:=true;
Left:=104;
Top:=16;
end;
PanConsole.Color:=$00D9F0FF;
ImgPrev.Visible:=false;
with Label4 do
begin
Left:=104;
Top:=56;
Font.Color:=$000099FF;
Caption:='Vorgang angehalten.';
Visible:=true;
end;
with BtnCancelTask do
begin
Visible:=true;
BtnCaption:='Neu';
State:='new';
Width:=78;
Left:=104;
Top:=80;
end;
with BtnRunTask do
begin
Visible:=false;
BtnCaption:='';
State:='UNSET';
Width:=78;
Left:=264;
Top:=80;
end;
with BtnAddTask do
begin
Visible:=true;
BtnCaption:='Fortsetzen';
State:='continue';
Width:=75;
Left:=349;
Top:=80;
end;
end
else if lowercase(cType)='failure' then
begin
with Image2 do
begin
Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'data\icons\stop_red.png');
Visible:=true;
end;
with PanProgress do
begin
Visible:=true;
Left:=104;
Top:=16;
end;
PanConsole.Color:=$00CDCCFF;
ImgPrev.Visible:=false;
with Label4 do
begin
Left:=104;
Top:=56;
Font.Color:=$000000CC;
Caption:='Es ist ein Fehler aufgetreten. Vorgang abgebrochen!';
Visible:=true;
end;
with BtnCancelTask do
begin
Visible:=false;
BtnCaption:='';
State:='UNSET';
Width:=78;
Left:=104;
Top:=80;
end;
with BtnRunTask do
begin
Visible:=true;
BtnCaption:='Start';
State:='start';
Width:=78;
Left:=264;
Top:=80;
end;
with BtnAddTask do
begin
Visible:=false;
BtnCaption:='Hinzufügen';
State:='UNSET';
Width:=78;
Left:=349;
Top:=80;
end;
end
else if lowercase(cType)='done' then
begin
with Image2 do
begin
Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'data\icons\tick_darkgreen.png');
Visible:=true;
end;
with PanProgress do
begin
Visible:=false;
Left:=104;
Top:=16;
end;
PanConsole.Color:=$00DAFFD7;
ImgPrev.Visible:=false;
with Label4 do
begin
Left:=104;
Top:=16;
Font.Color:=$000C9F00;
Caption:='Es wurden '+IntToStr(lastCopy+1)+' Bilder erfolgreich kopiert.';
Visible:=true;
end;
with BtnCancelTask do
begin
Visible:=true;
BtnCaption:='Neu';
State:='new';
Width:=78;
Left:=104;
Top:=80;
end;
with BtnRunTask do
begin
Visible:=false;
BtnCaption:='';
State:='UNSET';
Width:=78;
Left:=264;
Top:=80;
end;
with BtnAddTask do
begin
Visible:=true;
BtnCaption:='Zielordner öffnen';
State:='openTargetDir';
Width:=118;
Left:=309;
Top:=80;
end;
end
else if lowercase(cType)='default' then
begin
with Image2 do
begin
Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'data\icons\stop_gray.png');
Visible:=true;
end;
with PanProgress do
begin
Visible:=false;
Left:=104;
Top:=16;
end;
PanConsole.Color:=$00E6E6E6;
ImgPrev.Visible:=true;
editCoverLinkChange(Form1);
with Label4 do
begin
Left:=104;
Top:=16;
Font.Color:=$008C8C8C;
Caption:='Bereit zum Kopieren';
Visible:=true;
end;
with BtnCancelTask do
begin
Visible:=true;
BtnCaption:='Zurücksetzen';
State:='UNSET';
Width:=85;
Left:=104;
Top:=80;
end;
with BtnRunTask do
begin
Visible:=true;
BtnCaption:='Start';
State:='start';
Width:=78;
Left:=264;
Top:=80;
end;
with BtnAddTask do
begin
Visible:=true;
BtnCaption:='Hinzufügen';
State:='UNSET';
Width:=78;
Left:=349;
Top:=80;
end;
end;
end;
{wird beim Loslassen der Maustaste ausgeführt}
procedure TDesignButton2.MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if btnAction() then
begin
RunTask();
end;
end;
function TDesignButton.btnAction(): boolean;
var P: TPoint;
begin
GetCursorPos(P);
P:=self.ScreenToClient(P);
with self.Canvas do
begin
Brush.Color:=$00E4E4E4;
Brush.Style:=bsSolid;
Pen.Color:=$007D7D7D;
Pen.Style:=psSolid;
Pen.Width:=1;
Font.Style:=[fsBold];
Font.Color:=$004E4E4E;
Rectangle(0, 0, self.Width, self.Height);
TextOut((self.Width-
self.Canvas.TextWidth(self.FBtnCaption)) div 2,
(self.Height-
self.Canvas.TextHeight(self.FBtnCaption)) div 2,
self.BtnCaption);
end;
if ((P.X>=0) and (P.X<=self.Width))
and ((P.Y>=0) and (P.Y<=self.Height))then
begin
self.Parent.Refresh;
Sleep(50);
result:=true;
exit;
end;
result:=false;
end;
procedure TDesignButton.RunTask();
begin
if lowercase(self.State)='opentargetdir' then
OpenDocument(Unit1.lastTargetDir)
else if lowercase(self.State)='new' then
Form1.setConsoleType('default')
else if lowercase(self.State)='cancel' then
Unit1.abort:=true
else if lowercase(self.State)='pause' then
begin
Unit1.abort:=true;
Unit1.pause:=true;
end
else if lowercase(self.State)='start' then
begin
Unit1.lastCopy:=-1;
Form1.setConsoleType('run');
Form1.copyImage(Form1.editCoverLink.Text, Form1.editTargetDir.Text,
StrToInt(Form1.editCopyNum.Text), StrToInt(Form1.editStartNum.Text));
end
else if lowercase(self.State)='continue' then
begin
Form1.setConsoleType('run');
Form1.copyImage(Unit1.lastSourcePath, Unit1.lastTargetDir,
Unit1.lastCopyNum, Unit1.lastStartNum);
end;
Ich hoffe ihr könnt mein Problem lösen, ich kann es nich

LG
ConcAPPtLab
P.S.: Dieser Fehler trat auch schon einmal bei einem früheren Projekt auf...auch da konnte ich ihn nicht beheben....