Zeichnen Ohne DrawCell
Re: Zeichnen Ohne DrawCell
Jou, du übermalst es ja auch in deiner Procedure SetzRegel, hier musst du natürlich Col und Row überprüfen ob diese > 0 sind.
-
- Beiträge: 619
- Registriert: Mi 9. Mär 2011, 16:34
- OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
- CPU-Target: 64Bit
- Wohnort: seit 01.06.2011 in Wahlstedt
Re: Zeichnen Ohne DrawCell
Besagt Procedure wird bei Programmstart ausgerufen??? sollte Eigentlich net so sein, das SetzRegel erst hierDiBo33 hat geschrieben:Jou, du übermalst es ja auch in deiner Procedure SetzRegel, hier musst du natürlich Col und Row überprüfen ob diese > 0 sind.
Code: Alles auswählen
procedure TForm2.Button1Click(Sender: TObject);
Var Max: Byte;
Farben: TKalender;
begin
inc(Count);
case Count of
1: begin
TempStr2.Add(IntToStr(Datum.Day) + '.' +
IntToStr(Datum.Month));
TempStr2.Add(RadioGroup1.Items[RadioGroup1.ItemIndex]);
with FormTemp do
begin
add(RadioGroup1.Caption);
for Max:= 1 to 5 do
add(RadioGroup1.Items[Max-1]);
add(IntToStr(RadioGroup1.Top));
end;
Checkbox1.Visible:= False;
With RadioGroup1 do
begin
Caption:= 'Regelschmerzen';
Items.Clear;
Items.Add('Keine');
Items.Add('Leichte');
Items.Add('Normal');
Items.Add('Stark');
Top:= CheckBox1.Top;
end;
end;
2: begin
TempStr2.Add(RadioGroup1.Items[RadioGroup1.ItemIndex]);
RadioGroup1.Visible:= False;
Label1.Visible:= True;
Label2.Visible:= True;
Edit1.Visible:= True;
Edit2.Visible:= True;
end;
3: begin
TempStr2.Add(Edit1.Text);
TempStr2.Add(Edit2.Text);
Label1.Visible:= False;
Label2.Visible:= False;
Edit1.Visible:= False;
Edit2.Visible:= False;
Memo1.Visible:= True;
end;
4: begin
Farben.Regel:= Form1.ColorDialog1.Color;
Farben.Menstruation:= Form1.ColorDialog2.Color;
with Memo1 do
for Max:= 1 to Lines.Co[code=laz]
TempStr2.Add(lines[Max-1]);
For Max:= 1 to TempStr2.Count do
TempStr.Add(TempStr2[Max-1]);
TempStr.SaveToFile('Test.virus');
Form1.SetzRegel; // erster aufruf von SetzRegel
Form1.SetzRegel(Farben);
Button2.Click;
end;
end;
end;[/code]das erste mal aufgerufen wird!
Code: Alles auswählen
Procedure TForm1.SetzRegel(Kalender: TKalender); Overload;
begin
with StringGrid1 do
begin
Canvas.Pen.Width:= 1;
Canvas.Brush.Color:= Kalender.Menstruation;
Canvas.FillRect(CellRect(Form2.Datum.Day, Form2.Datum.Month));
// Repaint;
end;
end;
Code: Alles auswählen
Canvas.FillRect(CellRect(Form2.Datum.Day, Form2.Datum.Month));
das ist der grundgedankt. bei werten, welche ein Ungüldiges Datum ergeben würden, auch 0.0. bekommt das programm den wert False, und bricht den rest ab, das sollte nach der Schleife auch so sein.
Code: Alles auswählen
Function TForm2.DateExist(Day, Month: Byte):Boolean;
begin
DayTrue:= False;
case Month of
1, 3, 5, 7, 8, 10, 12: DayTrue:= True;
2: case Day Of
1..29: begin
DayTrue:= True;
if Form1.Schalt and (Day = 29) then DayTrue:= True;
end;
end;
4, 6, 9, 11: Case Day of
1..30 : DayTrue:= True;
end;
end;
result:= DayTrue;
end;
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache
und der Kreis Segeberg meine LIEBE 


Re: Zeichnen Ohne DrawCell
OnSelectCell wird auch aufgerufen bevor du darauf klickst, ich würde OnClick dafür verwenden.Besagt Procedure wird bei Programmstart ausgerufen???
-
- Beiträge: 619
- Registriert: Mi 9. Mär 2011, 16:34
- OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
- CPU-Target: 64Bit
- Wohnort: seit 01.06.2011 in Wahlstedt
Re: Zeichnen Ohne DrawCell
Stimmt die wird ebenso die Drawcell gleich aufgerufen.DiBo33 hat geschrieben:OnSelectCell wird auch aufgerufen bevor du darauf klickst, ich würde OnClick dafür verwenden.Besagt Procedure wird bei Programmstart ausgerufen???
Code: Alles auswählen
procedure TForm1.DrawGrid1SelectCell(Sender: TObject; aCol, aRow: Integer; var CanSelect: Boolean);
begin
if run then Run:= False; // erste Abfang
if _Free then // dauerlauf verhindern.
begin
Caption:= Caption + 'Select|' + IntToSTr(aCol) + '.' + IntToStr(aRow);
if Form2.DateExist(aCol, aRow) then
begin
Form2.Datum.Day:= aCol;
Form2.Datum.Month:= aRow;
// Eintrag;
end;
_free:= False;
end;
end;
aber SelectCell bzw drawcell liefern mir über die werde aCol und aRow das Datum was ich auch nutzten muß.
da ich dieses einmal allerdings ein StringGrid nutzen will, liegt es mir gerade diesmal fern in dem punkt aufzugeben.
soll aber wie hier http://www.michael-fuchs.net/newsgroups ... ongrid.png angeleht sein.
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache
und der Kreis Segeberg meine LIEBE 


Re: Zeichnen Ohne DrawCell
Also soll nur die Farbe den Status hat Regel oder hat keine anzeigen, unabhängig der schwere der Regel?
Regeldaten.Kalender hat doch bereits ein entspr. Array zur Verfügung, also setzt du in SetzeRegel nur den Eintrag auf True oder False und fragst den Status im OnDrawCell ab.
Sonst nirgends wird irgendwo der Canvas übermalt.
Wenn du den Status in SetRegel änderst, kannst du mit StringGrid1.Invalidate ein Neuzeichnen veranlassen.
Regeldaten.Kalender hat doch bereits ein entspr. Array zur Verfügung, also setzt du in SetzeRegel nur den Eintrag auf True oder False und fragst den Status im OnDrawCell ab.
Code: Alles auswählen
procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
aRect: TRect; aState: TGridDrawState);
var
sg: TStringGrid;
begin
sg := TStringGrid(Sender);
if (aCol = 0) or (aRow = 0) then begin
sg.Canvas.Brush.Color := clBtnFace;
end else begin
if Regeldaten.Kalender[aRow, aCol] then
sg.Canvas.Brush.Color := clRed
else
sg.Canvas.Brush.Color := clWhite;
sg.Canvas.FillRect(aRect);
sg.Canvas.TextRect(aRect, aRect.Left + 2, aRect.Top + 2, sg.Cells[aCol, aRow]);
sg.Canvas.FrameRect(aRect);
end;
end;
Wenn du den Status in SetRegel änderst, kannst du mit StringGrid1.Invalidate ein Neuzeichnen veranlassen.
-
- Beiträge: 619
- Registriert: Mi 9. Mär 2011, 16:34
- OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
- CPU-Target: 64Bit
- Wohnort: seit 01.06.2011 in Wahlstedt
Re: Zeichnen Ohne DrawCell
ich glaube hier reden wir wirklich aneinander vorbei!
das Grundproblem liegt darin, das die Zelle(1,0 bis 32,0 auch Übermalt wird.
ich könnte das kante programm erst mal weiter schreiben, und dies Ignorieren! aber das Problem besteht weiter...
bei mir steht von Haus aus der Tag drinne nur das wird auch Übermalt. sprich wo die tage 1 bis 31 stehen sollten sehe ich nun nur ein leeres Feld in der Farbe clbtnface der text is einfach wech.
Edit*
Da ja bei drawcell der codeabschnitt
nicht zu gehen scheint muß ich den über diesen code machen
Anders wäre es mir zwar lieber gewesen aber scheint bei grid's wohl so zu sein.
das Grundproblem liegt darin, das die Zelle(1,0 bis 32,0 auch Übermalt wird.
ich könnte das kante programm erst mal weiter schreiben, und dies Ignorieren! aber das Problem besteht weiter...
bei mir steht von Haus aus der Tag drinne nur das wird auch Übermalt. sprich wo die tage 1 bis 31 stehen sollten sehe ich nun nur ein leeres Feld in der Farbe clbtnface der text is einfach wech.
Edit*
Da ja bei drawcell der codeabschnitt
Code: Alles auswählen
for temp:= 1 to 31 do
StringGrid1.Cells[Temp, 0]:= inttostr(Temp);
Code: Alles auswählen
for Temp:= 1 to 31 do
StringGrid1.Canvas.TextOut(((30*temp)+65-(Stringgrid1.Canvas.TextWidth(intToStr(temp))div 2)),
5, IntToStr(Temp));
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache
und der Kreis Segeberg meine LIEBE 


Re: Zeichnen Ohne DrawCell
Du hast die Events wohl noch nicht ganz verstanden, SelectCell und DrawItem werden unabhängig deines Zutuns ständig aufgerufen.
Ich hab dir mal ein Beispiel angehängt wie ich das mit dem Status und DrawItem meine.
Ich hab dir mal ein Beispiel angehängt wie ich das mit dem Status und DrawItem meine.
- Dateianhänge
-
regel.zip
- (6.19 KiB) 76-mal heruntergeladen
-
- Beiträge: 619
- Registriert: Mi 9. Mär 2011, 16:34
- OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
- CPU-Target: 64Bit
- Wohnort: seit 01.06.2011 in Wahlstedt
Re: Zeichnen Ohne DrawCell
Schau ich mir morgen mal in ruhe an.DiBo33 hat geschrieben:Du hast die Events wohl noch nicht ganz verstanden, SelectCell und DrawItem werden unabhängig deines Zutuns ständig aufgerufen.
Ich hab dir mal ein Beispiel angehängt wie ich das mit dem Status und DrawItem meine.
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache
und der Kreis Segeberg meine LIEBE 


-
- Beiträge: 619
- Registriert: Mi 9. Mär 2011, 16:34
- OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
- CPU-Target: 64Bit
- Wohnort: seit 01.06.2011 in Wahlstedt
Re: Zeichnen Ohne DrawCell
Genau so in der richtung meine ich das. gut das Die Jahrezahl oben links in der ecke steht, ok! is Optional.
Aber das Eigendliche problem, von dem ich die ganz zeit rede, ich der Punkt, das in den feldern der Farbe nlBtnFace, links von der Jahrezahl die werte 1 bis 31 einfach verschwinden.

dies ist das einzige, von dem ich hier reden.
Dibo Danke für die zeilen, muste aber 2 zeilen an mein BS anpassen.
form2, werd ich lieber meine nutzen, da die Tabs so sauber das auch sein mag, noch einies an Arbeit machen würden (Bedingungen ändern, usw.) aber im großen und Ganzsen suber und danke für deine Mühe.
Aber das Eigendliche problem, von dem ich die ganz zeit rede, ich der Punkt, das in den feldern der Farbe nlBtnFace, links von der Jahrezahl die werte 1 bis 31 einfach verschwinden.

dies ist das einzige, von dem ich hier reden.
Dibo Danke für die zeilen, muste aber 2 zeilen an mein BS anpassen.
form2, werd ich lieber meine nutzen, da die Tabs so sauber das auch sein mag, noch einies an Arbeit machen würden (Bedingungen ändern, usw.) aber im großen und Ganzsen suber und danke für deine Mühe.
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache
und der Kreis Segeberg meine LIEBE 

